﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Serviços.BDServices;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.OtherServices;

namespace TCC_Hotel.Apresentacao.Gerencia
{
    public partial class GerenciarParametros : System.Web.UI.Page
    {
        ParametroService servico_Parametro = new ParametroService();

        /// <summary>
        /// Carregamento da página
        /// </summary>       
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();

            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Gerenciar_Parametros)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            if (!IsPostBack)
            {
               //recupera os parametros
                List<Parametros> parametrosAtuais = servico_Parametro.RecuperarParametros();

                //Coloca os parametros atuais nos textsbox
                txtHorarioSMS.Text = parametrosAtuais.Where(i => i.Codigo == "Horario_SMS_CheckOut").FirstOrDefault().Valor;
                txtHorarioReservas.Text = parametrosAtuais.Where(i => i.Codigo == "Horario_Exclusao_Reservas_Antigas").FirstOrDefault().Valor;
                txtGerarDiaria.Text = parametrosAtuais.Where(i => i.Codigo == "Horario_Novas_Diarias_CheckOut").FirstOrDefault().Valor;
                txtExclusaoReservas.Text = parametrosAtuais.Where(i => i.Codigo == "Quantidade_Dias_Exclusao_Reservas").FirstOrDefault().Valor;
                txtHorarioCheckIn.Text = parametrosAtuais.Where(i => i.Codigo == "Horario_CheckIn").FirstOrDefault().Valor;
                txtHorarioCheckOut.Text = parametrosAtuais.Where(i => i.Codigo == "Horario_CheckOut").FirstOrDefault().Valor;

            }
        }

        /// <summary>
        /// Evento do botão de salvar
        /// </summary>      
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            ComumServices comum = new ComumServices();

            //preenche a lista obrigatoria para verificar se todos os campos obrigatorios fora preenchidos
            List<string> listaObrigatoria = new List<string>() 
            { 
                txtHorarioSMS.Text.Trim(),
                txtHorarioReservas.Text.Trim(),
                txtGerarDiaria.Text.Trim(),
                txtExclusaoReservas.Text.Trim(),
                txtHorarioCheckIn.Text.Trim(),
                txtHorarioCheckOut.Text.Trim()
            };


            //Verifica se algum campo obrigatório nao foi preenchido
            if (!comum.ValidaCamposObrigatorios(listaObrigatoria))
            {
                MensagemJS("ERRO: Campo(s) obrigatório(s) em branco");
                return;
            }
            
            //remove para verificar apenas os horarios
            listaObrigatoria.Remove(txtExclusaoReservas.Text);

            //Verifica se algum campo nao tem a qnt de caracteres especificada
            if (!servico_Parametro.VerificaHorarios(listaObrigatoria))
            {
                MensagemJS("ERRO: Horários devem manter o formado hh:mm:ss");
                return;
            }
           
            List<Parametros> parametros = new List<Parametros>()
            {
                new Parametros()
                {
                    Codigo = "Horario_SMS_CheckOut",
                    Valor = txtHorarioSMS.Text                   
                },
                new Parametros()
                {
                    Codigo = "Horario_Exclusao_Reservas_Antigas",
                    Valor = txtHorarioReservas.Text                  
                },

                new Parametros()
                {
                     Codigo = "Horario_CheckOut",
                     Valor = txtHorarioCheckOut.Text                              
                },

                new Parametros()
                {
                     Codigo = "Horario_CheckIn",
                     Valor = txtHorarioCheckIn.Text               
                },

                new Parametros()
                {
                     Codigo = "Quantidade_Dias_Exclusao_Reservas",
                     Valor = txtExclusaoReservas.Text                
                },

                new Parametros()
                {
                     Codigo = "Horario_Novas_Diarias_CheckOut",
                     Valor = txtGerarDiaria.Text            
                }

            };

            //chama o serviço que edita os parametros do banco de dados
            if (servico_Parametro.EditarParametros(parametros))
            {
                MensagemJS("Parâmetros editados com sucesso!");
                HttpContext.Current.Cache.Remove("Lista_Parametros");
            }
            else
            {
                MensagemJS("ERRO: Ocorreu um erro e os parâmetros não foram editados!");
                return;
            }
        }

        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "Mensagem",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }
    }
}